﻿using AspectCore.DynamicProxy;
using JoJoC_AOP.Models;

namespace JoJoC_AOP.AOPS
{
    /// <summary>
    /// MyServiceAop
    /// 实现将Show1() 写入到 Show() 当中
    /// </summary>
    public class ProductAop : AbstractInterceptorAttribute
    {
        private static Dictionary<string, List<Product>> _products = new Dictionary<string, List<Product>>();
        public override async Task Invoke(AspectContext context, AspectDelegate next)
        {
            // 判断缓存中是否有数据
            if (_products.ContainsKey("product"))
            {
                // 根据key获取数据
                List<Product> product1 = _products["product"];

                // 返回数据
                context.ReturnValue = product1;
            }
            else
            { 
                // 从数据库种查询数据并添加到缓存当中
                // 执行GetProduct方法
                await next(context);

                // 获取商品集合
                List<Product> products = context.ReturnValue as List<Product>;

                // 将商品数据写入 _products
                _products.Add("product", products);
            }
        }
    }
}
